Giao thức Needham-Schroeder với khóa bí mật Giao thức Needham-Schroeder

Theo cách ký hiệu giao thức mật mã, giao thức Needham-Schroeder với khóa bí mật được mô tả như sau, trong đó, Alice (A) sử dụng máy chủ (S) chứng minh nhận dạng của mình với Bob (B), đồng thời tạo ra một khóa chung ( K A B {\displaystyle {K_{AB}}} ):

  1. A → S : A , B , N A {\displaystyle A\rightarrow S:A,B,N_{A}}
  2. S → A : { N A , K A B , B , { K A B , A } K B S } K A S {\displaystyle S\rightarrow A:\{N_{A},K_{AB},B,\{K_{AB},A\}_{K_{BS}}\}_{K_{AS}}}
  3. A → B : { K A B , A } K B S {\displaystyle A\rightarrow B:\{K_{AB},A\}_{K_{BS}}}
  4. B → A : { N B } K A B {\displaystyle B\rightarrow A:\{N_{B}\}_{K_{AB}}}
  5. A → B : { N B − 1 } K A B {\displaystyle A\rightarrow B:\{N_{B}-1\}_{K_{AB}}}

(0) Trước khi các giao dịch có thể diễn ra, mỗi người sử dụng trong hệ thống có một khóa bí mật chia sẻ với máy chủ. Ở đây K X S {\displaystyle K_{XS}} là khóa chung giữa X và máy chủ S.

(1) Khi muốn trao đổi thông tin với Bob, đầu tiên, Alice gửi một gói tin tới máy chủ trong đó có định danh của Alice và Bob cùng với một số được tạo ngẫu nhiên N A {\displaystyle N_{A}} .

(2) Máy chủ tạo ra một khóa phiên K A B {\displaystyle {K_{AB}}} để Alice và Bob sử dụng trong giao dịch tiếp theo. Sau đó, máy chủ gửi khóa này cho Alice dưới dạng mật mã hóa bằng khóa chung giữa máy chủ và Alice; đồng thời máy chủ cũng mật mã hóa khóa phiên bằng khóa chung với Bob và gửi cho Alice. Số ngẫu nhiên N A {\displaystyle N_{A}} được gửi kèm cùng gói tin để đảm bảo gói tin là mới (tránh trường hợp kẻ tấn công dùng lại gói tin cũ) và định danh của Bob để Alice biết được người để dùng khóa (trong trường hợp Alice đồng thời giao dịch với nhiều người).

(3) Alice giải mã và gửi phần mã hóa bằng khóa của Bob tới cho Bob. Alice không thể giải mã được phần này và chỉ có Bob mới giải mã được.

(4) Bob giải mã gói tin nhận được và thu được khóa phiên. Bob tạo ra một số ngẫu nhiên khác và gửi cho Alice sau khi mật mã hóa với khóa phiên để chứng tỏ mình đã nhận được khóa.

(5) Alice giải mã, thực hiện một phép toán đơn giản trên giá trị nhận được rồi gửi lại cho Bob để khẳng định giao dịch tiếp tục và Alice là người thực sự có khóa.

Tấn công

Giao thức này không đảm bảo an toàn. Vấn đề là ở gói tin số 3: Bob không thể xác định được đây có phải là gói tin mới được tạo ra hay là gói tin được phát lại. Nếu một người thứ 3 có được một khóa cũ thì có thể thực hiện tấn công bằng cách phát lại gói tin và làm cho Bob tin rằng mình đang trao đổi thông tin với Alice.

Ngăn chặn

Dùng Tem thời gian (TimeStamp): Xem Giao thức Kerberos